package com.togo.algorithm.medium.dp;

/**
 * @Author K2
 * @Description
 * 给定一个数字，我们按照如下规则把它翻译为字符串：0 翻译成 “a” ，1 翻译成 “b”，……，11 翻译成 “l”，……，25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数，用来计算一个数字有多少种不同的翻译方法。
 *
 *  
 *
 * 示例 1:
 *
 * 输入: 12258
 * 输出: 5
 * 解释: 12258有5种不同的翻译，分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
 *  
 *
 * 提示：
 *
 * 0 <= num < 231
 *
 * @Date 上午10:09 2023/2/15
 **/
public class Offer46 {

    public int translateNum(int num) {
        String s = num + "";
        int[] dp = new int[s.length()];
        dp[0] = 1;
        if(s.length() > 1) {
            if(valid(s.charAt(0), s.charAt(1))) {
                dp[1] = 2;
            } else {
                dp[1] = 1;
            }
        }

        for(int i = 2; i < s.length(); i++) {
            if(valid(s.charAt(i - 1), s.charAt(i))) {
                dp[i] = dp[i - 1] + dp[i - 2];
            } else{
                dp[i] = dp[i - 1];
            }
        }

        return dp[s.length() - 1];
    }

    private boolean valid(char a, char b) {
        return a == '1' || (a == '2' && b <= '5');
    }

    public static void main(String[] args) {
        Offer46 offer46 = new Offer46();
        System.out.println(offer46.translateNum(25));
    }
}
